#pragma once

#include "ap/IPCPSignalManager.h"
#include "ap/APCPSignalManager.h"
#include "ap/APTMSignalManager.h"
#include "ap/AudioIPCPSignalManager.h"


namespace ecarx::transfer {

class SignalManager : public ecarx::transfer::IPCPSignalManager,
                      public ecarx::transfer::APTMSignalManager,
                      public ecarx::transfer::APCPSignalManager,
                      public ecarx::transfer::AudioIPCPSignalManager{
  std::vector<std::shared_ptr<ITransfer>> mConns;
  private:
    SignalManager();

  public:
    static SignalManager& getInstance();
    SignalManager(const SignalManager&) = delete;
    SignalManager& operator=(const SignalManager&) = delete;
    SignalManager(const SignalManager&&) = delete;
    SignalManager& operator=(const SignalManager&&) = delete;

    std::vector<std::shared_ptr<ITransfer>>& getTransfers();
    bool enterStrMode();
    bool exitStrMode();
};

}  // namespace ecarx::transfer

#define SIGNAL ecarx::transfer::SignalManager::getInstance()
#define SIGNAL_AUDIO_CONTROL McuControl::getInstance()